package com.solution.admin.auth.service;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import cn.jiguang.common.resp.BaseResult;

import com.solution.admin.auth.entity.UserEntity;
import com.solution.admin.customer.entity.CompanyEntity;
import com.solution.admin.customer.entity.CustomerEntity;
import com.solution.common.entity.BaseReturn;
import com.solution.common.page.PageBean;
import com.solution.common.page.PageParam;

/**
 * 用户信息接口service接口层
 * 
 * @author diwankang
 * @date 2017年4月12日 下午2:44:11
 */
public interface UserService {


	UserEntity getUserByCode(String userCode);
	/**
	 * 保存用户信息
	 * 
	 * @param userEntity
	 *            用户实体
	 * @return Long 添加成功用户的ID
	 * @exception 无
	 * @author llp
	 * @date 2017年4月14日 下午1:40:26
	 */
	long saveUser(UserEntity userEntity);

	/**
	 * 分页查询用户信息
	 * 
	 * @param pageParam
	 *            分页参数
	 * @param paramMap
	 *            查询参数
	 * @return PageBean 分页参数和分页数据
	 * @exception 无
	 * @author llp
	 * @date 2017年4月12日 下午2:44:34
	 */
	public PageBean listUser(PageParam pageParam, Map<String, Object> paramMap);

	/**
	 * 获取登陆者信息
	 * 
	 * @param params
	 *            查询参数
	 * @return
	 * @author diwankang
	 * @date 2017年4月13日 下午5:21:58
	 */
	public UserEntity getUserByName(Map<String, Object> params);

	/**
	 * 根据手机号码查询用户信息
	 * 
	 * @param params
	 * @return
	 * @author chenl
	 * @date 2017年5月9日 上午9:22:03
	 */
	public UserEntity getUserInfor(Map<String, Object> params);

	/**
	 * 用用户信息表的唯一性验证封装类
	 * 
	 * @param checkDealerId
	 *            经销商ID
	 * @param checkField
	 *            验证字段
	 * @param checkValue
	 *            验证字段的值
	 * @param checkUserId
	 *            用户编号
	 * @return
	 */
	public int checkUserUnique(Map<String, Object> params);

	/**
	 * 根据ID查询用户信息
	 * 
	 * @param id
	 *            用户id
	 * @return UserEntity 用户对象
	 * @author lilp
	 * @date 2017年4月13日 下午5:21:58
	 */
	public UserEntity getUserById(Long id);

	/**
	 * 更新用户
	 * 
	 * @param userEntity
	 *            用户实体
	 * @return Long 更新是否成功，>1代表更新成功
	 * @exception 无
	 * @author llp
	 * @date 2017年4月12日 下午2:44:59
	 */
	public int updateUser(UserEntity userEntity);

	/**
	 * 重置用户密码
	 * 
	 * @param id
	 *            用户id
	 * @param userCode
	 *            用户账号
	 * @return Long 更新是否成功，>1代表更新成功
	 * @exception 无
	 * @author llp
	 * @date 2017年4月12日 下午2:44:59
	 */
	public int resetUserPwd(Long id, String userCode);

	/**
	 * 根据手机号码重置用户密码
	 * 
	 * @param id
	 * @param userCode
	 * @return 更新是否成功，>1代表更新成功
	 * @author chenl
	 * @date 2017年5月9日 上午9:06:07
	 */
	public int resetUserPwdByMobile(Long id, String userCode, String password,
			String passwordSalt);

	public int updateStatus(Long userId, Integer status);

	/**
	 * 修改当前登录人密码
	 * 
	 * @param user
	 * @return
	 * @author qiaoenyin
	 * @date 2017年6月19日 下午3:56:57
	 */
	public int updatePwd(UserEntity user);

	/**
	 * 根据经销商编码获取经销商大区及公司的名称、编码
	 * 
	 * @param dealerCodes
	 * @return
	 * @author xkl
	 * @date 2017年7月31日 下午3:04:56
	 */
	public Map<String, Map<String, Object>> listCodeMapByCodes(
			List<String> dealerCodes);

	/**
	 * 根据用户类型获取用户信息
	 * @param param
	 * @return
	 * @author chenling
	 * @date 2017年8月1日 下午2:53:45
	 */
	public List<UserEntity> getUserList(Map<String, Object> param);

	/**
	 * 设置用户角色
	 * @param userId
	 * @param roleIdList
	 */
	public void assginUserRole(long userId, ArrayList<Long> roleIdList);
	
    /**
     * 用户注册（用户信息，公司信息，客户信息）
     * 
     * @Title: regUser
     * @Description:(描述)
     * @param user
     * @param company
     * @param customer
     * @return BaseReturn
     * @author xu_cc
     * @throws Exception
     *             exception
     * @Date 创建时间：2017年10月17日 下午8:30:14
     */
    public int regUser(UserEntity user, CompanyEntity company, CustomerEntity customer) throws Exception;
    
    /**
	 * 获取业务员列表数据
	 * @param params
	 * @return
	 * @author: solin
	 * @date: 2017年10月20日 下午3:57:56
	 */
	public List<UserEntity> getSalesmanList(Map<String, Object> param);
	
	/**
	 * 查询业务员列表
	 * @param paramMap
	 * @return
	 */
	public List<UserEntity> listSalesmanForSelector(Map<String, Object> paramMap);
	
	/**
	 * 删除用户
	 * @param user
	 * @return
	 */
	public int logicDeleteUser(long id);
	
	/**
	 * 删除用户
	 * @param user
	 * @return
	 */
	public int physicsDeleteUser(long id);
}
